package com.liujun.io.nio.trans.tran;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

/**
 * 字节流处理
* 源文件名：TransProxyByte.java
* 文件版本：1.0.0
* 创建作者：liujun
* 创建日期：2016年8月24日
* 修改作者：liujun
* 修改日期：2016年8月24日
* 文件描述：liujun
* 版权所有：Copyright 2016 zjhz, Inc. All Rights Reserved.
*/
public class TransProxyByte implements TransProxyInf {

    private static final TransProxyByte tranProxy = new TransProxyByte();

    /**
     * 消息信息
     * 
     * @字段说明 msg
     */
    private Queue<ByteBuffer> msg = new ConcurrentLinkedQueue<ByteBuffer>();

    public TransProxyByte() {
    }

    public static TransProxyByte getInstance() {
        return tranProxy;
    }

    /**
     * 将网络通道转换为file 方法描述
     * 
     * @param socketChanel
     * @创建日期 2016年8月11日
     */
    public boolean tranFrom(SocketChannel socketChanel) throws IOException {

        boolean tranFrom = false;

        ByteBuffer buff = ByteBuffer.allocate(512);

        if (socketChanel.read(buff) > 0) {
            msg.add(buff);
            tranFrom = true;
        }

        return tranFrom;

    }

    /**
     * 将数据写入后端通道信息 方法描述
     * 
     * @param toChannel
     * @创建日期 2016年8月11日
     */
    public boolean tranTo(SocketChannel toChannel) throws IOException {

        boolean tranTo = false;

        if (!msg.isEmpty()) {

            ByteBuffer buff = null;

            while ((buff = msg.poll()) != null) {

                buff.flip();

                toChannel.write(buff);

                buff.clear();
            }
        }

        return tranTo;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.liujun.io.nio.trans.tran.TransProxyInf#close()
     */
    @Override
    public void close() {

    }

    /*
     * (non-Javadoc)
     * 
     * @see com.liujun.io.nio.trans.tran.TransProxyInf#reset()
     */
    @Override
    public void reset() {

    }

}
